Date		:	11 janvier 1991 : incomplet
					17 f�vrier 1991 : rien...
					21 juin    1991 : �a y est !
		Protection	:	MOT DE PASSE
		Programme	:       LIGHT SPEED
		Outils		:	PANO_AT / SOFT-ICE
		Fichier		:	LIGHSPD.OVL
		Temps pass�	:	15 minutes / 4 heures / 2 heures
		Soci�t�		:	MICROPROSE
		Divers	        :	PERISCOPE � 09F9:0000  ( DOS V5.00 )
		Origine		:	INDONESIE
		Num�ro		:	097

	
	Jusqu'� ces derniers temps cette soci�t� �tait sp�cialis�e dans
	la protection type DISQUETTE CLEF, elle vient de se mettre � la
	protection "SOFT". Erreur fatale !
	J'ai voulu voir si leur protection �tait � la hauteur de celle
	d'ACCOLADE ou de SIERRA mais loin de l�...
	Une INT 21 est g�n�r�e lorsqu'on appuie sur la touche ENTER en
	2718:023D mais je m'apper�ois que je suis d�j� trop loin dans le
	programme...et la sortie vers le DOS est in�vitable.
	J'appuie donc manuellement sur le switch g�n�rant la NMI au moment
	de la demande de mot de passe. Je d�roule le programme au pas � pas
	et je tombe sur un CMP AX,000D en 28D4:00B4. Je r�ponds comme si
	j'avais appuy� sur la touche ENTER et je passe un RETF en 28D4:00C1.
	Au premier test en 28D4:0257 j'infl�chi le cours normal des choses
	et je fais un essai...

	28D4:0249 50            PUSH    AX
	28D4:024A 9A9C4CBF1F    CALL    1FBF:4C9C
	28D4:024F 83C402        ADD     SP,+02
	28D4:0252 833E384C00    CMP     WORD PTR [4C38],+00
	28D4:0257 7513          JNZ     026C
	28D4:0259 FF76EA        PUSH    [BP-16]
	28D4:025C 8D46D7        LEA     AX,[BP-29]
	28D4:025F 50            PUSH    AX
	28D4:0260 9A3E48BF1F    CALL    1FBF:483E
	28D4:0265 83C404        ADD     SP,+04
	28D4:0268 0BC0          OR      AX,AX

	Avec PCTOOLS chercher : 4C007513FF76
	et modifier	      : ....EB......

	Date	:	17 f�vrier 1991
	Temps	:	4 heures d�j� et ce n'est pas fini...

	Je retire ce que j'ai dit, les concepteurs de la protection de 
	LIGHTSPEED sont � la hauteur de SIERRA et d'ACCOLADE car le jeu
	est toujours prot�g� et m�me tr�s bien prot�g�.
	Le jeu se plante lorsque l'on appuie sur la touche S.
	Je recharge PERISCOPE pour retrouver ma routine pr�c�dente mais
	il y a eu des modifications dans mon config.sys car il se charge
	� 0B23 au lieu de 09F9.
	Il y a 2 solutions pour retrouver la routine avec un segment CS
	different:
	1) faire une recherche de la routine HEXA avec PCTOOLS et y placer
	   un octet CC. ( c'est une INT 3 et PERISCOPE s'affiche d�s qu'il
	   la rencontre )
	2) effectuer le calcul suivant:

	 Valeur de l'ancien CS + la difference actuelle de chargement de
	 PERISCOPE, ce qui donne ( 28D4h + ( 0B23h - 09F9h )) = 29FEh
	
	Et on retrouve la routine.
	J'essaie tout ce qu'il est possible d'essayer en vain. Une routine
	CALL 20E9:483E teste les caract�res entr�s avec ceux qui sont en
	m�moire. Mais m�me si l'on force le r�sultat de la comparaison le
	soft se plante toujours.
	Instructions utilis�es pour la comparaison:
        REPNZ SCANB : tant que le r�sultat est # de zero on SCAN Byte par Byte.
	REPNZ CMPSB :  "                            "    on CoMPare le String 
	Byte par Byte en faisant une soustraction. ( SCAN ne d�truit pas les
	octets au contraire de CMP )
	J'ai envie de laisser tomber car je suis a bout de moyen, je regarde
	d'ou la chaine est compar�e: elle est en clair en 3589:F0E2 voir
	ci-dessous.
	J'essaie de voir d'ou elle vient puisqu'elle est cod�e ( on ne trouve
	rien dans aucun fichier du jeu ). Je place la carte PANO en �criture
	sur le SEGMENT:offset de la chaine source et je relance le soft.

  3589:F0E2        75 6E 6B 6E 6F 77-6E 00 00 00 00 00 00 00     unknown.......
           * 0001 Lines Of 00 Skipped *

	Je trouve l'adresse suivante 29FE:0304 avec la carte. Les octets sont
	bien cod�s mais en examinant la routine il suffit de faire un NEG pour
	les avoirs en clair.

		 NEG 91h = NEG 1001 0001 = 0110 1110 + 1 = 68 = 'h'

  d es:304                                                                
  29FE:0304              91 8C 98 9B-8E 97 92 99 00 9B CF 9F       ..........O.
  29FE:0310  99 9F 97 92 8D 8C 00 8C-CF 8B 92 9B 8E 8E 97 92   ........O.......
  29FE:0320  99 94 87 00 89 CF 97 92-8C 9B 8E 8D 8C 9B 94 94   .....O..........
  29FE:0330  9F 8E 00 EE CE 93 91 8E-9B 00 EC CE 9A 97 99 98   ...nN.....lN....
  29FE:0340  8C 9B 8E 8D 00 DE CE 8E-9B 9F 94 94 87 00 DC CE   .....^N.......\N


	Et ce qui ne gate rien ces octets sont enfins en clair dans le fichier
	LIGHTSPD.OVL sous le format suivant XX XX YY YY YY YY.... 00
	Les octets XX repr�sentent la page, paragraphe, et ligne ou se trouve
	le nom dans la doc. Les octets YY correspondent a chaque caract�re du
	mot et l'octet 00 sert de d�limiteur.
	J'ai essay� de mettre la m�me valeur partout ( des 00 ) le soft affiche
	page 0, ligne 0, paragraphe 0, et ne donne plus le premier caract�re.
	En appuyant sur la touche return cel� fonctionne jusqu'� la touche S !
	Je vais r�essayer car j'ai du sauvagement enlever des octets utiles.
	Si j'arrive simplement � lui faire afficher le m�me code je serais
	satisfait.

	Ci-dessous le secteur dans son format original tel que le donne
	PCTOOLS:

  lightspd.ovl                                                             
                                                                           
                     SECTEUR : 047                                         
  DEC HEX                                                                    
  000 000  8D 91 00 DE DE 8D 9D 8E 9B 9B 92 00 D9 DE 9A 94   �� �ލ����� �ޚ�
  016 010  9F 8D 98 97 92 99 00 EF DD 9E 94 9F 8D 8C 9B 8E   ������ �ݞ���
  032 020  00 CC DD 90 91 8E 8C 97 91 92 8D 00 CB DD 8C 8E    �ݐ���� ���
  048 030  9F 97 94 9E 94 9F 86 9B 8E 00 CA DD 9C 9F 93 9F   ��������� �ݜ���
  064 040  99 9B 9C 00 C9 DD 8E 9B 9F 9C 91 8B 8C 00 ED DC   ��� �ݎ������ ��
  080 050  9F 94 94 00 DD DC 9B 9F 9D 98 00 D8 DC 9C 9B 9A   ��� �ܛ��� �ܜ��
  096 060  9B 92 8D 97 8A 9B 00 CC DC 9D 91 92 8A 9B 8E 8C   ����� �ܝ��蛎�
  112 070  9B 8E 8D 00 CB DC 8C 8B 8E 9E 97 92 9B 8D 00 B8   ��� ������� �
  128 080  DC 99 9B 92 9B 8E 9F 94 00 A7 DC 89 97 8C 98 91   ܙ������ �܉�
  144 090  8B 8C 00 EE CF 8D 90 98 9B 8E 97 9D 9F 94 00 EC   �� �ύ�������� �
  160 0A0  CF 9F 9E 8D 91 8E 9E 9B 9C 00 EA CF 9B 9A 9A 9B   ϟ������� �ϛ���
  176 0B0  9D 8C 00 E7 CF 97 93 93 8B 92 9B 00 DD CF 94 9F   �� �ϗ�� �ϔ�
  192 0C0  8E 99 9B 00 CC CF 99 8B 97 9C 9B 9C 00 CB CF 8A   ��� �ϙ�� ���
  208 0D0  97 9B 89 9B 8E 00 B8 CF 9B 8A 9B 92 00 AE CF 93   ����� �ϛ蛒 ���
  224 0E0  9B 9D 98 9F 92 97 8D 93 00 AC CF 98 91 89 9B 8A   �������� �Ϙ����
  240 0F0  9B 8E 00 AB CF 8D 91 93 9B 8C 97 93 9B 8D 00 A9   �� �ύ������� �
                                                                             
	Ici le m�me secteur "pass� � la moulinette" par mon HEXUTIL.EXE
	on voit clairement les diff�rents mots de passe:
                                                                                
  DEC HEX                                                                    
  000 000  73 6F 00 22 22 73 63 72 65 65 6E 00 27 22 66 6C   so ""screen '"fl
  016 010  61 73 68 69 6E 67 00 11 23 62 6C 61 73 74 65 72   ashing #blaster
  032 020  00 34 23 70 6F 72 74 69 6F 6E 73 00 35 23 74 72    4#portions 5#tr
  048 030  61 69 6C 62 6C 61 7A 65 72 00 36 23 64 61 6D 61   ailblazer 6#dama
  064 040  67 65 64 00 37 23 72 65 61 64 6F 75 74 00 13 24   ged 7#readout .$
  080 050  61 6C 6C 00 23 24 65 61 63 68 00 28 24 64 65 66   all #$each ($def
  096 060  65 6E 73 69 76 65 00 34 24 63 6F 6E 76 65 72 74   ensive 4$convert
  112 070  65 72 73 00 35 24 74 75 72 62 69 6E 65 73 00 48   ers 5$turbines H
  128 080  24 67 65 6E 65 72 61 6C 00 59 24 77 69 74 68 6F   $general Y$witho
  144 090  75 74 00 12 31 73 70 68 65 72 69 63 61 6C 00 14   ut 1spherical 
  160 0A0  31 61 62 73 6F 72 62 65 64 00 16 31 65 66 66 65   1absorbed 1effe
  176 0B0  63 74 00 19 31 69 6D 6D 75 6E 65 00 23 31 6C 61   ct 1immune #1la
  192 0C0  72 67 65 00 34 31 67 75 69 64 65 64 00 35 31 76   rge 41guided 51v
  208 0D0  69 65 77 65 72 00 48 31 65 76 65 6E 00 52 31 6D   iewer H1even R1m
  224 0E0  65 63 68 61 6E 69 73 6D 00 54 31 68 6F 77 65 76   echanism T1howev
  240 0F0  65 72 00 55 31 73 6F 6D 65 74 69 6D 65 73 00 57   er U1sometimes W
                                                                             
       Restore  Help  Edit  Neg  Xor  NOt  +/-  SP  Secteur  Print  ESC      
                                                      
	21 juin 1991

	L'approche du probl�me comme montr� ci-dessus peut fonctionner dans
	certain cas, mais ayant entre temps mis la main sur un d�buggeur de
	course, je d�cide de m'y r�attaquer en appelant SOFT-ICE lors du
	blocage du jeu.                       

	Malheureusement ( et c'est la premi�re fois qu'il me laisse tomber
	bien qu'il soit en mode prot�g� ) il ne r�pond plus !
	Donc je d�cide de faire du pas a pas pour voir o� cel� se passe.
	J'aurais pu d�rouler l'entr� des caract�res un a un pour voir quel
	genre de test le programme effectue, j'ai essay�; c'est inextricable.
	Il faut avoir un peu de patience car avant d'arriver � l'endroit 
	fatidique il faut descendre un alien puis apr�s cel� faire S.
	J'arrive jusque l� et j'active SOFT-ICE auquel je fais faire des F10
	� n'en plus finir.
	Je d�cide de faire des F7 ( fonction HERE ) ce qui m'affiche SOFT-ICE
	toute les fois qu'il passe par l�. Au bout d'un certain nombre de fois
	l'�cran se fige. Heureusement j'ai relev� l'endroit o� cel� se produit:

	2150:0E45 9A0200B60C	CALL 0CB6:0002

	Pour y aller directement je fais un :

	BPM 2150:0E45 X

	Et je reboote tout en gardant mes param�tres dans SOFT-ICE.
	Puis � partir de la premi�re apparition de SOFT-ICE je fais du F7 et
	je compte le nombre de fois que le programme tourne avant de se
	viander: 91 fois !
	
	Je modifie mon BPM pour qu'il ne s'affiche qu'� la 90 �me fois:
	
	BPE 0
	BPM 2150:0E45 X C90

	Et l� je me plante car le 90 entr� est en d�cimal, il faut taper
	BASE 10 auparavant et repasser en BASE 16 pour que finalement le
	compteur du point d'arr�t accepte bien la valeur HEXA de 90.
	Je relance le jeu et j'appuie sur S; SOFT-ICE s'affiche et je continue
	� pied...
	Je m'aper�ois que je quitte cette boucle qui est appel�e 91 fois pour
	arriver � une s�rie de sauts. Avant de continuer je jette un oeil sur
	la suite du listing et l� je d�couvre une chose curieuse:

	2150:0905	7407		JZ	090E            ��Ŀ
	2150:0907	9A021A461D	CALL 	1D46:1A02      <�Ŀ�
	2150:090C	EB09		JMP	0907	        ��ٳ
	2150:090E	A14B9F		MOV	AX,[9F4B]      <����

	Le saut en 905 contourne un CALL qui est appel� ind�finiment !
	Je remplace le saut en 905 par un JMP apr�s le CALL et mon jeu
	fonctionne ( enfin ).
	Je fais la modif avec PCTOOLS et j'essaye; �a marche... une fois...
	et cel� se replante.
	Ce saut est peut-�tre appel� par une autre routine. Je d�cide de
	"nettoyer" enti�rement ces 7 octets par des NOP pour voir.
	Et bien le jeu se plante toujours mais � un autre endroit.
	L'id�e me vient de regarder avec PCTOOLS si cette chaine n'existe pas
	ailleurs dans le fichier.
	Et je vous le donne en mille ; elle existe 13 fois !!!
	Je me mets au travail en nettoyant tout ce qui traine et je relance le
	jeu une fois de plus.

	Cette fois c'est OK.

	Avec PCTOOLS chercher 4C007513FF76 et remplacer 75 par EB
	Premi�re modification du mois de janvier 1991.
	Puis chercher 13 fois de suite la chaine : 9A021A2011EBF9 et l'�craser
	par des 90.
	
	FREDDY